home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 501-525 / disk_509 / multi_player / sources / amreplay.s < prev    next >
Text File  |  1992-05-06  |  13KB  |  737 lines

  1. ; STARTREKKER 1.2      AM REPLAYROUTINE
  2. ;
  3. ; BY BJOERN WESEN / EXOLON OF FAIRLIGHT
  4.  
  5.  
  6. ; Call mt_init, then mt_music each frame, call mt_end to stop
  7.  
  8. ; NOTE! The mt_amwaveforms have to reside in CHIPMEM! Therefore the ORG
  9. ;       below...
  10.  
  11. ; !!!!
  12.     XDEF    _st_init,_st_music,_st_end
  13.     XREF    _adr_data,_adr_data2
  14. ; !!!!
  15.  
  16. _st_init:
  17. ; !!!!
  18.     move.l    _adr_data,a0
  19.     lea    $3b8(a0),a1
  20.     moveq    #$7f,d0
  21.     moveq    #0,d2
  22.     moveq    #0,d1
  23. mt_lop2:move.b    (a1)+,d1
  24.     cmp.b    d2,d1
  25.     ble.s    mt_lop
  26.     move.l    d1,d2
  27. mt_lop:    dbf    d0,mt_lop2
  28.     addq.b    #1,d2
  29.  
  30.     asl.l    #8,d2
  31.     asl.l    #2,d2
  32.     lea    4(a1,d2.l),a2
  33.     lea    mt_samplestarts(pc),a1
  34.     add.w    #42,a0
  35.     moveq    #$1e,d0
  36. mt_lop3:clr.l    (a2)
  37.     move.l    a2,(a1)+
  38.     moveq    #0,d1
  39.     move.w    (a0),d1
  40.     clr.b    2(a0)
  41.     asl.l    #1,d1
  42.     add.l    d1,a2
  43.     add.l    #30,a0
  44.     dbf    d0,mt_lop3
  45.  
  46.     or.b    #2,$bfe001
  47.     move.b    #6,mt_speed
  48.     moveq    #0,d0
  49.     lea    $dff000,a0
  50.     move.w    d0,$a8(a0)
  51.     move.w    d0,$b8(a0)
  52.     move.w    d0,$c8(a0)
  53.     move.w    d0,$d8(a0)
  54.     clr.b    mt_songpos
  55.     clr.b    mt_counter
  56.     clr.w    mt_pattpos
  57.     rts
  58.  
  59. _st_end:
  60.     clr.w    $dff0a8
  61.     clr.w    $dff0b8
  62.     clr.w    $dff0c8
  63.     clr.w    $dff0d8
  64.     move.w    #$f,$dff096
  65.     rts
  66.  
  67. _st_music:
  68.     move.l    _adr_data,a0
  69.     addq.b    #1,mt_counter
  70.     move.b    mt_counter(pc),d0
  71.     cmp.b    mt_speed(pc),d0
  72.     blt    mt_nonew
  73.     clr.b    mt_counter
  74.  
  75.     move.l    _adr_data,a0
  76.     lea    $c(a0),a3
  77.     lea    $3b8(a0),a2
  78.     lea    $43c(a0),a0
  79.  
  80.     moveq    #0,d0
  81.     moveq    #0,d1
  82.     move.b    mt_songpos(pc),d0
  83.     move.b    (a2,d0.w),d1
  84.     lsl.w    #8,d1
  85.     lsl.w    #2,d1
  86.     add.w    mt_pattpos(pc),d1
  87.     clr.w    mt_dmacon
  88.  
  89.     lea    $dff0a0,a5
  90.     lea    mt_voice1(pc),a4
  91.     bsr    mt_playvoice
  92.     addq.l    #4,d1
  93.     lea    $dff0b0,a5
  94.     lea    mt_voice2(pc),a4
  95.     bsr    mt_playvoice
  96.     addq.l    #4,d1
  97.     lea    $dff0c0,a5
  98.     lea    mt_voice3(pc),a4
  99.     bsr    mt_playvoice
  100.     addq.l    #4,d1
  101.     lea    $dff0d0,a5
  102.     lea    mt_voice4(pc),a4
  103.     bsr    mt_playvoice
  104.  
  105.     bsr    mt_wait
  106.     move.w    mt_dmacon(pc),d0
  107.     or.w    #$8000,d0
  108.     move.w    d0,$dff096
  109.     bsr    mt_wait
  110. mt_nodma:
  111.     lea    $dff000,a3
  112.     lea    mt_voice1(pc),a4
  113.     move.l    $a(a4),$a0(a3)
  114.     move.w    $e(a4),$a4(a3)
  115.     tst.w    30(a4)
  116.     bne.s    mt_nov1
  117.     move.w    $12(a4),$a8(a3)
  118. mt_nov1:lea    mt_voice2(pc),a4
  119.     move.l    $a(a4),$b0(a3)
  120.     move.w    $e(a4),$b4(a3)
  121.     tst.w    30(a4)
  122.     bne.s    mt_nov2
  123.     move.w    $12(a4),$b8(a3)
  124. mt_nov2:lea    mt_voice3(pc),a4
  125.     move.l    $a(a4),$c0(a3)
  126.     move.w    $e(a4),$c4(a3)
  127.     tst.w    30(a4)
  128.     bne.s    mt_nov3
  129.     move.w    $12(a4),$c8(a3)
  130. mt_nov3:lea    mt_voice4(pc),a4
  131.     move.l    $a(a4),$d0(a3)
  132.     tst.w    30(a4)
  133.     bne.s    mt_nov4
  134.     move.w    $e(a4),$d4(a3)
  135.     move.w    $12(a4),$d8(a3)
  136.  
  137. mt_nov4:add.w    #$10,mt_pattpos
  138.     cmp.w    #$400,mt_pattpos
  139.     bne.s    mt_exit
  140. mt_next:clr.w    mt_pattpos
  141.     clr.b    mt_break
  142.     move.l    _adr_data,a0
  143.     addq.b    #1,mt_songpos
  144.     and.b    #$7f,mt_songpos
  145.     move.b    $3b6(a0),d0
  146.     cmp.b    mt_songpos(pc),d0
  147.     bne.s    mt_exit
  148.     move.b    $3b7(a0),mt_songpos
  149. mt_exit:tst.b    mt_break
  150.     bne.s    mt_next
  151.     bra    mt_amhandler
  152.  
  153. mt_wait:moveq    #4,d3        
  154. mt_wai2:move.b    $dff006,d2    
  155. mt_wai3:cmp.b    $dff006,d2    
  156.     beq.s    mt_wai3
  157.     dbf    d3,mt_wai2    
  158.     moveq    #8,d2
  159. mt_wai4:dbf    d2,mt_wai4
  160.  
  161. mt_nonew:
  162.     lea    mt_voice1(pc),a4
  163.     lea    $dff0a0,a5
  164.     bsr    mt_com
  165.     lea    mt_voice2(pc),a4
  166.     lea    $dff0b0,a5
  167.     bsr    mt_com
  168.     lea    mt_voice3(pc),a4
  169.     lea    $dff0c0,a5
  170.     bsr    mt_com
  171.     lea    mt_voice4(pc),a4
  172.     lea    $dff0d0,a5
  173.     bsr    mt_com
  174.     bra.s    mt_exit
  175.  
  176. mt_mulu:
  177.     dc.w    0,$1e,$3c,$5a,$78,$96,$b4,$d2,$f0,$10e,$12c,$14a
  178.     dc.w    $168,$186,$1a4,$1c2,$1e0,$1fe,$21c,$23a,$258,$276
  179.     dc.w    $294,$2b2,$2d0,$2ee,$30c,$32a,$348,$366,$384,$3a2
  180.  
  181. mt_playvoice:
  182.     move.l    (a0,d1.l),(a4)
  183.     moveq    #0,d2
  184.     move.b    2(a4),d2
  185.     lsr.b    #4,d2
  186.     move.b    (a4),d0
  187.     and.b    #$f0,d0
  188.     or.b    d0,d2
  189.     beq    mt_oldinstr
  190.  
  191.     lea    mt_samplestarts-4(pc),a1
  192.     move.w    d2,34(a4)
  193.     move.w    d2,d0
  194.     mulu    #120,d0
  195.     move.l    a0,-(sp)
  196.     move.l    _adr_data2,a0
  197.     lea    24(a0,d0.l),a0
  198.     clr.w    30(a4)
  199.     cmp.w    #"AM",(a0)
  200.     bne.s    mt_noa9
  201.     move.w    6(a0),d0
  202.     lsr.w    #2,d0
  203.     st    30(a4)
  204. mt_noa9:move.l    (sp)+,a0
  205.  
  206.     asl.w    #2,d2
  207.     move.l    (a1,d2.l),4(a4)
  208.     lsr.w    #2,d2
  209.     mulu    #30,d2
  210.     move.w    (a3,d2.w),8(a4)
  211.     tst.w    30(a4)
  212.     beq.s    mt_noa8
  213.     move.w    d0,$12(a4)
  214.     bra.s    mt_noa7
  215. mt_noa8:move.w    2(a3,d2.w),$12(a4)
  216. mt_noa7:moveq    #0,d3
  217.     move.w    4(a3,d2.w),d3
  218.     tst.w    d3
  219.     beq.s    mt_noloop
  220.     move.l    4(a4),d0
  221.     asl.w    #1,d3
  222.     add.l    d3,d0
  223.     move.l    d0,$a(a4)
  224.     move.w    4(a3,d2.w),d0
  225.     add.w    6(a3,d2.w),d0
  226.     move.w    d0,8(a4)
  227.     bra.s    mt_hejaSverige
  228. mt_noloop:
  229.     move.l    4(a4),d0
  230.     add.l    d3,d0
  231.     move.l    d0,$a(a4)
  232. mt_hejaSverige:
  233.     move.w    6(a3,d2.w),$e(a4)
  234.  
  235. mt_oldinstr:
  236.     move.w    (a4),d0
  237.     and.w    #$fff,d0
  238.     beq    mt_com2
  239.     tst.w    30(a4)
  240.     bne.s    mt_rambo
  241.     tst.w    8(a4)
  242.     beq    mt_stopsound
  243.     tst.b    $12(a4)
  244.     bne    mt_stopsound
  245.     move.b    2(a4),d0
  246.     and.b    #$f,d0
  247.     cmp.b    #5,d0
  248.     beq    mt_setport
  249.     cmp.b    #3,d0
  250.     beq    mt_setport
  251.  
  252. mt_rambo:
  253.     move.w    (a4),$10(a4)
  254.     and.w    #$fff,$10(a4)
  255.     move.w    $1a(a4),$dff096
  256.     clr.b    $19(a4)
  257.  
  258.     tst.w    30(a4)
  259.     beq.s    mt_noaminst
  260.     move.l    a0,-(sp)
  261.     move.w    34(a4),d0
  262.     mulu    #120,d0
  263.  
  264.     move.l    _adr_data2,a0
  265.     lea    24(a0,d0.l),a0
  266.  
  267.     moveq    #0,d0
  268.     move.w    26(a0),d0
  269.     lsl.w    #5,d0
  270.     add.l    #mt_amwaveforms,d0
  271.     move.l    d0,(a5)
  272.     move.w    #16,4(a5)
  273.     move.l    d0,$a(a4)
  274.     move.w    #16,$e(a4)
  275.     move.w    6(a0),32(a4)
  276.     move.l    #1,36(a4)
  277.     move.w    34(a0),d0
  278.     move.w    d1,-(sp)
  279.     move.w    $10(a4),d1
  280.     lsl.w    d0,d1
  281.     move.w    d1,$10(a4)
  282.     move.w    d1,6(a5)
  283.     move.w    (sp)+,d1
  284.     move.l    (sp)+,a0
  285.     bra.s    mt_juck
  286.  
  287. mt_noaminst:
  288.     move.l    4(a4),(a5)
  289.     move.w    8(a4),4(a5)
  290.     move.w    $10(a4),6(a5)
  291.  
  292. mt_juck:move.w    $1a(a4),d0
  293.     or.w    d0,mt_dmacon
  294.     bra    mt_com2
  295.  
  296. mt_stopsound:
  297.     move.w    $1a(a4),$dff096
  298.     bra    mt_com2
  299.  
  300. mt_setport:
  301.     move.w    (a4),d2
  302.     and.w    #$fff,d2
  303.     move.w    d2,$16(a4)
  304.     move.w    $10(a4),d0
  305.     clr.b    $14(a4)
  306.     cmp.w    d0,d2
  307.     beq.s    mt_clrport
  308.     bge    mt_com2
  309.     move.b    #1,$14(a4)
  310.     bra    mt_com2
  311. mt_clrport:
  312.     clr.w    $16(a4)
  313.     rts
  314.  
  315. mt_port:move.b    3(a4),d0
  316.     beq.s    mt_port2
  317.     move.b    d0,$15(a4)
  318.     clr.b    3(a4)
  319. mt_port2:
  320.     tst.w    $16(a4)
  321.     beq.s    mt_rts
  322.     moveq    #0,d0
  323.     move.b    $15(a4),d0
  324.     tst.b    $14(a4)
  325.     bne.s    mt_sub
  326.     add.w    d0,$10(a4)
  327.     move.w    $16(a4),d0
  328.     cmp.w    $10(a4),d0
  329.     bgt.s    mt_portok
  330.     move.w    $16(a4),$10(a4)
  331.     clr.w    $16(a4)
  332. mt_portok:
  333.     move.w    $10(a4),6(a5)
  334. mt_rts:    rts
  335.  
  336. mt_sub:    sub.w    d0,$10(a4)
  337.     move.w    $16(a4),d0
  338.     cmp.w    $10(a4),d0
  339.     blt.s    mt_portok
  340.     move.w    $16(a4),$10(a4)
  341.     clr.w    $16(a4)
  342.     move.w    $10(a4),6(a5)
  343.     rts
  344.  
  345. mt_sin:    dc.b    0,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4
  346.     dc.b    $fa,$fd
  347.     dc.b    $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61
  348.     dc.b    $4a,$31,$18
  349.  
  350. mt_vib:    move.b    $3(a4),d0
  351.     beq.s    mt_vib2
  352.     move.b    d0,$18(a4)
  353.  
  354. mt_vib2:move.b    $19(a4),d0
  355.     lsr.w    #2,d0
  356.     and.w    #$1f,d0
  357.     moveq    #0,d2
  358.     move.b    mt_sin(pc,d0.w),d2
  359.     move.b    $18(a4),d0
  360.     and.w    #$f,d0
  361.     mulu    d0,d2
  362.     lsr.w    #7,d2
  363.     move.w    $10(a4),d0
  364.     tst.b    $19(a4)
  365.     bmi.s    mt_vibsub
  366.     add.w    d2,d0
  367.     bra.s    mt_vib3
  368. mt_vibsub:
  369.     sub.w    d2,d0
  370. mt_vib3:move.w    d0,6(a5)
  371.     move.b    $18(a4),d0
  372.     lsr.w    #2,d0
  373.     and.w    #$3c,d0
  374.     add.b    d0,$19(a4)
  375.     rts
  376.  
  377. mt_arplist:
  378.     dc.b    0,1,2,0,1,2,0,1,2,0,1,2,0
  379.     dc.b    1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  380.  
  381. mt_arp:    moveq    #0,d0
  382.     move.b    mt_counter(pc),d0
  383.     move.b    mt_arplist(pc,d0.w),d0
  384.     beq.s    mt_arp0
  385.     cmp.b    #2,d0
  386.     beq.s    mt_arp2
  387. mt_arp1:moveq    #0,d0
  388.     move.b    3(a4),d0
  389.     lsr.b    #4,d0
  390.     bra.s    mt_arpdo
  391. mt_arp2:moveq    #0,d0
  392.     move.b    3(a4),d0
  393.     and.b    #$f,d0
  394. mt_arpdo:
  395.     asl.w    #1,d0
  396.     move.w    $10(a4),d1
  397.     and.w    #$fff,d1
  398.     lea    mt_periods(pc),a0
  399.     moveq    #$24,d2
  400. mt_arp3:cmp.w    (a0)+,d1
  401.     bge.s    mt_arpfound
  402.     dbf    d2,mt_arp3
  403. mt_arp0:move.w    $10(a4),6(a5)
  404.     rts
  405. mt_arpfound:
  406.     move.w    -2(a0,d0.w),6(a5)
  407.     rts
  408.  
  409. mt_normper:
  410.     move.w    $10(a4),6(a5)
  411.     rts
  412.  
  413. mt_com:    move.w    2(a4),d0
  414.     and.w    #$fff,d0
  415.     beq.s    mt_normper
  416.     move.b    2(a4),d0
  417.     and.b    #$f,d0
  418.     tst.b    d0
  419.     beq.s    mt_arp
  420.     cmp.b    #1,d0
  421.     beq.s    mt_portup
  422.     cmp.b    #2,d0
  423.     beq.s    mt_portdown
  424.     cmp.b    #3,d0
  425.     beq    mt_port
  426.     cmp.b    #4,d0
  427.     beq    mt_vib
  428.     cmp.b    #5,d0
  429.     beq.s    mt_volport
  430.     cmp.b    #6,d0
  431.     beq.s    mt_volvib
  432.     move.w    $10(a4),6(a5)
  433.     cmp.b    #$a,d0
  434.     beq.s    mt_volslide
  435.     rts
  436.  
  437. mt_portup:
  438.     moveq    #0,d0
  439.     move.b    3(a4),d0
  440.     sub.w    d0,$10(a4)
  441.     move.w    $10(a4),d0
  442.     cmp.w    #$71,d0
  443.     bpl.s    mt_portup2
  444.     move.w    #$71,$10(a4)
  445. mt_portup2:
  446.     move.w    $10(a4),6(a5)
  447.     rts
  448.  
  449. mt_portdown:
  450.     moveq    #0,d0
  451.     move.b    3(a4),d0
  452.     add.w    d0,$10(a4)
  453.     move.w    $10(a4),d0
  454.     cmp.w    #$358,d0
  455.     bmi.s    mt_portdown2
  456.     move.w    #$358,$10(a4)
  457. mt_portdown2:
  458.     move.w    $10(a4),6(a5)
  459.     rts
  460.  
  461. mt_volvib:
  462.      bsr    mt_vib2
  463.      bra.s    mt_volslide
  464. mt_volport:
  465.      bsr    mt_port2
  466.  
  467. mt_volslide:
  468.     moveq    #0,d0
  469.     move.b    3(a4),d0
  470.     lsr.b    #4,d0
  471.     beq.s    mt_vol3
  472.     add.b    d0,$13(a4)
  473.     cmp.b    #$40,$13(a4)
  474.     bmi.s    mt_vol2
  475.     move.b    #$40,$13(a4)
  476. mt_vol2:moveq    #0,d0
  477.     move.b    $13(a4),d0
  478.     move.w    d0,8(a5)
  479.     rts
  480.  
  481. mt_vol3:move.b    3(a4),d0
  482.     and.b    #$f,d0
  483.     sub.b    d0,$13(a4)
  484.     bpl.s    mt_vol4
  485.     clr.b    $13(a4)
  486. mt_vol4:moveq    #0,d0
  487.     move.b    $13(a4),d0
  488.     move.w    d0,8(a5)
  489.     rts
  490.  
  491. mt_com2:move.b    $2(a4),d0
  492.     and.b    #$f,d0
  493.     cmp.b    #$e,d0
  494.     beq.s    mt_filter
  495.     cmp.b    #$d,d0
  496.     beq.s    mt_pattbreak
  497.     cmp.b    #$b,d0
  498.     beq.s    mt_songjmp
  499.     cmp.b    #$c,d0
  500.     beq.s    mt_setvol
  501.     cmp.b    #$f,d0
  502.     beq.s    mt_setspeed
  503.     rts
  504.  
  505. mt_filter:
  506.     move.b    3(a4),d0
  507.     and.b    #1,d0
  508.     asl.b    #1,d0
  509.     and.b    #$fd,$bfe001
  510.     or.b    d0,$bfe001
  511.     rts
  512.  
  513. mt_pattbreak:
  514.     move.b    #1,mt_break
  515.     rts
  516.  
  517. mt_songjmp:
  518.     move.b    #1,mt_break
  519.     move.b    3(a4),d0
  520.     subq.b    #1,d0
  521.     move.b    d0,mt_songpos
  522.     rts
  523.  
  524. mt_setvol:
  525.     cmp.b    #$40,3(a4)
  526.     bls.s    mt_sv2
  527.     move.b    #$40,3(a4)
  528. mt_sv2:    moveq    #0,d0
  529.     move.b    3(a4),d0
  530.     move.b    d0,$13(a4)
  531.     move.w    d0,8(a5)
  532.     rts
  533.  
  534. mt_setspeed:
  535.     moveq    #0,d0
  536.     move.b    3(a4),d0
  537.     cmp.b    #$1f,d0
  538.     bls.s    mt_sp2
  539.     moveq    #$1f,d0
  540. mt_sp2:    tst.w    d0
  541.     bne.s    mt_sp3
  542.     moveq    #1,d0
  543. mt_sp3:    move.b    d0,mt_speed
  544.     rts
  545.  
  546. mt_amhandler:
  547.     moveq    #3,d7
  548.     lea    mt_voice1,a6
  549.     lea    $dff0a0,a5
  550. mt_amloop:
  551.     tst.w    30(a6)
  552.     beq    mt_anrp
  553.     move.w    34(a6),d0
  554.     mulu    #120,d0
  555.     move.l    _adr_data2,a0
  556.     lea    24(a0,d0.l),a0
  557.  
  558.     tst.w    38(a6)
  559.     beq    mt_anrp
  560.     cmp.w    #1,38(a6)
  561.     bne.s    mt_anat
  562.     move.w    32(a6),d0
  563.     cmp.w    8(a0),d0
  564.     beq.s    mt_aaeq
  565.     cmp.w    8(a0),d0
  566.     blt.s    mt_aaad
  567.     move.w    10(a0),d0
  568.     sub.w    d0,32(a6)
  569.     move.w    32(a6),d0
  570.     cmp.w    8(a0),d0
  571.     bgt    mt_anxt
  572.     move.w    8(a0),32(a6)
  573. mt_aaeq:move.w    #2,38(a6)
  574.     bra    mt_anxt
  575. mt_aaad:move.w    10(a0),d0
  576.     add.w    d0,32(a6)
  577.     move.w    32(a6),d0
  578.     cmp.w    8(a0),d0
  579.     blt    mt_anxt
  580.     move.w    8(a0),32(a6)
  581.     bra.s    mt_aaeq
  582. mt_anat:cmp.w    #2,38(a6)
  583.     bne.s    mt_ana2
  584.     move.w    32(a6),d0
  585.     cmp.w    12(a0),d0
  586.     beq.s    mt_a2eq
  587.     cmp.w    12(a0),d0
  588.     blt.s    mt_a2ad
  589.     move.w    14(a0),d0
  590.     sub.w    d0,32(a6)
  591.     move.w    32(a6),d0
  592.     cmp.w    12(a0),d0
  593.     bgt    mt_anxt
  594.     move.w    12(a0),32(a6)
  595. mt_a2eq:move.w    #3,38(a6)
  596.     bra    mt_anxt
  597. mt_a2ad:move.w    14(a0),d0
  598.     add.w    d0,32(a6)
  599.     move.w    32(a6),d0
  600.     cmp.w    12(a0),d0
  601.     blt    mt_anxt
  602.     move.w    12(a0),32(a6)
  603.     bra.s    mt_a2eq
  604. mt_ana2:cmp.w    #3,38(a6)
  605.     bne.s    mt_andc
  606.     move.w    32(a6),d0
  607.     cmp.w    16(a0),d0
  608.     beq.s    mt_adeq
  609.     cmp.w    16(a0),d0
  610.     blt.s    mt_adad
  611.     move.w    18(a0),d0
  612.     sub.w    d0,32(a6)
  613.     move.w    32(a6),d0
  614.     cmp.w    16(a0),d0
  615.     bgt.s    mt_anxt
  616.     move.w    16(a0),32(a6)
  617. mt_adeq:move.w    #4,38(a6)
  618.     move.w    20(a0),40(a6)
  619.     bra.s    mt_anxt
  620. mt_adad:move.w    18(a0),d0
  621.     add.w    d0,32(a6)
  622.     move.w    32(a6),d0
  623.     cmp.w    16(a0),d0
  624.     blt.s    mt_anxt
  625.     move.w    16(a0),32(a6)
  626.     bra.s    mt_adeq
  627. mt_andc:cmp.w    #4,38(a6)
  628.     bne.s    mt_anst
  629.     subq.w    #1,40(a6)
  630.     bpl.s    mt_anxt
  631.     move.w    #5,38(a6)
  632.     bra.s    mt_anxt
  633. mt_anst:move.w    24(a0),d0
  634.     sub.w    d0,32(a6)
  635.     bpl.s    mt_anxt
  636.     clr.l    30(a6)
  637.     clr.w    38(a6)
  638.     move.w    26(a6),$dff096
  639. mt_anxt:move.w    32(a6),d0
  640.     lsr.w    #2,d0
  641.     move.w    d0,8(a5)
  642.     move.w    28(a0),d0
  643.     add.w    d0,16(a6)
  644.     move.w    30(a0),d1
  645.     beq.s    mt_nvib
  646.     move.w    36(a6),d2
  647.     moveq    #0,d3
  648.     cmp.w    #360,d2
  649.     blt.s    mt_vibq
  650.     sub.w    #360,d2
  651.     moveq    #1,d3
  652. mt_vibq:lea    mt_amsinus,a2
  653.     muls    (a2,d2.w),d1
  654.     asr.w    #7,d1
  655.     tst.w    d3
  656.     beq.s    mt_nvib
  657.     neg.w    d1
  658. mt_nvib:add.w    16(a6),d1
  659.     move.w    d1,6(a5)
  660.     move.w    32(a0),d0
  661.     add.w    d0,d0
  662.     add.w    d0,36(a6)
  663.     cmp.w    #720,36(a6)
  664.     blt.s    mt_anrp
  665.     sub.w    #720,36(a6)
  666. mt_anrp:lea    $10(a5),a5
  667.     lea    42(a6),a6
  668.     dbra    d7,mt_amloop
  669.  
  670.     lea    mt_noisewave,a0
  671.     move.w    #$7327,d0
  672.     moveq    #31,d1
  673. mt_nlop:move.b    d0,(a0)+
  674.     add.b    $dff007,d0
  675.     eor.w    #124,d0
  676.     rol.w    #3,d0
  677.     dbra    d1,mt_nlop
  678.     rts
  679.  
  680. mt_periods:
  681.     dc.w    $358,$328,$2fa,$2d0,$2a6,$280,$25c,$23a,$21a,$1fc,$1e0
  682.     dc.w    $1c5,$1ac,$194,$17d,$168,$153,$140,$12e,$11d,$10d,$fe
  683.     dc.w    $f0,$e2,$d6,$ca,$be,$b4,$aa,$a0,$97,$8f,$87
  684.     dc.w    $7f,$78,$71,0
  685.  
  686. mt_speed:    dc.b    6
  687. mt_counter:    dc.b    0
  688. mt_pattpos:    dc.w    0
  689. mt_songpos:    dc.b    0
  690. mt_break:    dc.b    0
  691. mt_dmacon:    dc.w    0
  692. mt_samplestarts:dcb.l    $1f,0
  693. mt_voice1:    dcb.w    13,0
  694.         dc.w    1
  695.         dcb.w    7,0
  696. mt_voice2:    dcb.w    13,0
  697.         dc.w    2
  698.         dcb.w    7,0
  699. mt_voice3:    dcb.w    13,0
  700.         dc.w    4
  701.         dcb.w    7,0
  702. mt_voice4:    dcb.w    13,0
  703.         dc.w    8
  704.         dcb.w    7,0
  705.  
  706.     section    data,DATA_C
  707. mt_amsinus:
  708.     dc.w    0,2,4,6,8,$b,$d,$f,$11,$14,$16,$18,$1a,$1c,$1e,$21
  709.     dc.w    $23,$25,$27,$29,$2b,$2d,$2f,$32,$34,$36,$38,$3a,$3c,$3e
  710.     dc.w    $3f,$41,$43,$45,$47,$49,$4b,$4d,$4e,$50,$52,$53,$55,$57
  711.     dc.w    $58,$5a,$5c,$5d,$5f,$60,$62,$63,$64,$66,$67,$68,$6a,$6b
  712.     dc.w    $6c,$6d,$6e,$6f,$71,$72,$73,$74,$74,$75,$76,$77,$78,$79
  713.     dc.w    $79,$7a,$7b,$7b,$7c,$7c,$7d,$7d,$7e,$7e,$7e,$7f,$7f,$7f
  714.     dc.w    $7f,$7f,$7f,$7f,$80,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7e,$7e
  715.     dc.w    $7e,$7d,$7d,$7c,$7c,$7b,$7b,$7a,$79,$79,$78,$77,$76,$75
  716.     dc.w    $74,$73,$72,$71,$6f,$6e,$6d,$6c,$6b,$6a,$68,$67,$66,$64
  717.     dc.w    $63,$62,$60,$5f,$5d,$5c,$5a,$58,$57,$55,$53,$52,$50,$4e
  718.     dc.w    $4d,$4b,$49,$47,$45,$43,$41,$40,$3e,$3c,$3a,$38,$36,$34
  719.     dc.w    $32,$2f,$2d,$2b,$29,$27,$25,$23,$21,$1e,$1c,$1a,$18,$16
  720.     dc.w    $14,$11,$f,$d,$b,$8,$6,$4,$2,0
  721. mt_amwaveforms:
  722.     dc.b    0,25,49,71,90,106,117,125
  723.     dc.b    127,125,117,106,90,71,49,25
  724.     dc.b    0,-25,-49,-71,-90,-106,-117
  725.     dc.b    -125,-127,-125,-117,-106
  726.     dc.b    -90,-71,-49,-25
  727.     dc.b    -128,-120,-112,-104,-96,-88,-80,-72,-64,-56,-48
  728.     dc.b    -40,-32,-24,-16,-8,0,8,16,24,32,40,48,56,64,72,80
  729.     dc.b    88,96,104,112,120
  730.     dcb.b    16,-128
  731.     dcb.b    16,127
  732. mt_noisewave:
  733.     dcb.b    32,0
  734.  
  735.     
  736.  
  737.